package br.requisiteworks.requisito.modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.requisiteworks.util.Entidade;

/**
 * Relaciona um {@link AtributoTipoRequisito} a um valor que sera definido no
 * requisito
 * 
 * @author Mikhail Domanoski
 * 
 * @version 1, 01/04/2010
 * 
 */
@Entity
@Table(name = "tbl_atributo")
public class AtributoRequisito extends Entidade {
	/**
	 * Numero do atributo no banco de dados
	 */
	@Id
	@Column(name = "num_atrib", nullable = false)
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int numero;

	/**
	 * Tipo do atributo
	 */
	@ManyToOne(fetch = FetchType.EAGER, optional = false)
	@JoinColumn(name = "num_atrib_tipo")
	private AtributoTipoRequisito tipo;

	/**
	 * Valor do atributo em um requisito
	 */
	@Column(name = "num_valor", nullable = false)
	private String valor;

	/**
	 * Requisito que possui o atributo
	 */

	@ManyToOne(targetEntity = Requisito.class, optional = true, fetch = FetchType.EAGER)
	@JoinColumn(name = "num_requi", nullable = true, referencedColumnName = "num_requi")
	private Requisito requisito;

	public Requisito getRequisito() {
		return requisito;
	}

	public void setRequisito(Requisito requisito) {
		this.requisito = requisito;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public AtributoTipoRequisito getTipo() {
		return tipo;
	}

	public void setTipo(AtributoTipoRequisito tipo) {
		this.tipo = tipo;
	}

	public String getValor() {
		return valor;
	}

	public void setValor(String valor) {
		this.valor = valor;
	}

	public Object getObject() {
		return this.tipo.getTipoDado().asObject(this.valor);
	}

	@Override
	public String toString() {

		return this.tipo.getNome() + ":" + this.valor;
	}
}
